# Copyright (C) 2026. Logiciel élaboré par l'État, via le DEPS.
# Nom des auteures : Flore Cornuet et Camille Parent, DEPS.
# Ce programme informatique a été développé par le DEPS.
# Il permet de produire les résultats du Culture Études 1-2026.

# Ce programme a été exécuté en septembre 2026 avec la version 4.5.3 de R.
# La publication peut être consultée sur le site du Deps. 
# Ce programme utilise les données du pass Culture et du recensement de la population 2022.

# Bien qu'il n'existe aucune obligation légale à ce sujet, les utilisateurs de ce programme sont
# invités à signaler au DEPS leurs travaux issus de la réutilisation de ce code, ainsi que les
# éventuels problèmes ou anomalies qu'ils y rencontreraient, en écrivant à contact.deps@culture.gouv.fr .
# Ce logiciel est régi par la licence EUPL V1.2 soumise au droit français et européen, respectant
# les principes de diffusion des logiciels libres. Vous pouvez utiliser, modifier et/ou redistribuer
# ce programme sous les conditions de la licence EUPL V1.2, telle que diffusée sur
# https://eupl.eu/1.2/fr/ .
# En contrepartie de l'accessibilité au code source et des droits de copie, de modification et de
# redistribution accordés par cette licence, il n'est offert aux utilisateurs qu'une garantie
# limitée. Pour les mêmes raisons, seule une responsabilité restreinte pèse sur les auteures du
# programme, le titulaire des droits patrimoniaux et les concédants successifs.
# À cet égard l'attention de l'utilisateur est attirée sur les risques associés au chargement, à
# l'utilisation, à la modification et/ou au développement et à la reproduction du logiciel par
# l'utilisateur étant donné sa spécificité de logiciel libre, qui peut le rendre complexe à
# manipuler et qui le réserve donc à des développeurs et des professionnels avertis possédant des
# connaissances informatiques approfondies. Les utilisateurs sont donc invités à charger et tester
# l'adéquation du logiciel à leurs besoins dans des conditions permettant d'assurer la sécurité de
# leurs systèmes et ou de leurs données et, plus généralement, à l'utiliser et l'exploiter dans les
# mêmes conditions de sécurité.



# chargement des packages ####

library(data.table); library(tidyverse); library(arrow); library(ggplot2)

# chargement des tables intermédiaires ####

tab_cat <- setDT(read_parquet(paste0(chemin_intermediaires, "tab_cat.parquet")))

# === filtre : chq300, création + expiration, nés 2003-2005, cat renseignée ===

base <- tab_cat[champ_creation == 1 &
                  champ_expiration == 1 &
                  chq_300 == 1 &
                  annee_naissance %in% 2003:2005 &
                  sexe %in% c("F","H") &
                  !is.na(cat_depense)]

# === recodage catégories (MUSIQUE_LIVE -> Concert et Festival) ===

base[, cat_group := fcase(
  cat_depense == "LIVRE",               "Livre",
  cat_depense == "CINEMA",              "Cinéma",
  cat_depense == "MUSIQUE_LIVE",        "Concert et Festival",
  cat_depense == "MUSIQUE_ENREGISTREE", "Musique enregistrée",
  cat_depense == "INSTRUMENT",          "Instrument de musique",
  cat_depense == "BEAUX_ARTS",          "Beaux-arts",
  cat_depense == "SPECTACLE",           "Spectacle vivant",
  cat_depense == "JEU",                 "Jeu",
  cat_depense == "FILM",                "Film",
  cat_depense == "MUSEE",               "Musée",
  default = "Autre"
)]

# === part par sexe ===

rep <- base[, .(depense = sum(total_depense)), by = .(sexe, cat_group)]
rep[, part := depense / sum(depense) * 100, by = sexe]
rep[, Genre := fifelse(sexe == "F", "Filles", "Garçons")]

# === ordre des catégories (par part globale décroissante, Autre en dernier) ===

ordre_cat <- rep[, .(tot = sum(depense)), by = cat_group][order(-tot), cat_group]
ordre_cat <- c(setdiff(ordre_cat, "Autre"), "Autre")

# === graphe : catégorie en ordonnée, barres horizontales, couleur par genre ===

rep |>
  ggplot(aes(x = factor(cat_group, levels = rev(ordre_cat)),
             y = part,
             fill = Genre)) +
  geom_col(position = position_dodge(width = 0.7), width = 0.65) +
  geom_text(aes(label = round(part)),
            position = position_dodge(width = 0.7),
            hjust = -0.2, size = 3.5) +
  coord_flip() +
  scale_fill_manual(values = c("Filles" = "#4361EE", "Garçons" = "#3A0CA3")) +
  scale_y_continuous(labels = function(x) x,
                     expand = expansion(mult = c(0, 0.1)),
                     name = "En %") +
  labs(x = NULL, fill = NULL) +
  theme_minimal(base_size = 13) +
  theme(
    panel.grid.major.y = element_blank(),
    panel.grid.minor   = element_blank(),
    legend.position    = "top"
  )

# export tableau données ####

rep %>% 
  select(-depense,-sexe) %>% 
  spread(Genre,part)

write.table(rep %>% 
              select(-depense,-sexe) %>% 
              spread(Genre,part), "clipboard-256", sep = "\t", row.names = FALSE, dec = ",")
